Skip to main content

Agent SFT

你用 Qwen3-4B 搭了个 Agent,给它挂了六个工具,system prompt 里写满了「什么时候该调哪个」。

大部分时候它是对的。但每天总有那么几次:明明该查数据库,它自己编了个答案;工具调对了,参数少填一个必填字段;第三轮对话之后,它忘了第一轮用户说过「只看华东区」。

你把 system prompt 又加了两百字。好了一点,然后在别的地方坏掉了。

Prompt 能教会模型「有哪些工具」,教不会它「什么时候不该用」。 后者是从大量例子里长出来的判断,不是读一遍说明书能记住的东西。这个专题做的就是这件事:拿真实轨迹去微调它。

一、要做出来的东西

一次完整的 LoRA SFT:Qwen3-4B 作为 base,输入是几千条带工具调用的多轮轨迹,输出是一个在你自己的工具集上明显更靠谱的模型,以及一份训练前后的对照评测。

先划清不做什么:不做全参微调(4B 全参要 120G 以上显存,这个专题只用一张 24G 卡);不追任何公开榜单的分数(4B 在综合 agent benchmark 上接近全 0,测了没有意义);不做强化学习,那是下一个专题的题目。

三段里只有中间一段计费。左右两段的工作量远大于中间,而且完全可以在开卡之前做完 —— 这是把预算压在 $2 量级的前提。

跳过左边最后一步(备评测集),训完就没有参照物;跳过右边的失败样本归类,只看端到端成功率,你会知道「不够好」但不知道该改什么。

二、和站内其它专题的分工

工具调用这件事,站里已经从几个角度写过,容易搞混:

专题讲什么
Agent 编排范式不改模型,靠提示词和控制流让它按 ReAct 之类的范式走
Agent 上下文工程工具定义、历史、检索结果怎么塞进有限的上下文
Agent 训练环境训练时那个能被反复重置、能自动判分的环境怎么搭
本专题改模型权重本身,用轨迹数据把判断力训进去

前两个是「模型不动,改外围」,本专题是「外围不动,改模型」。遇到问题应该先试前两个 —— 改 prompt 五分钟能验证,微调一轮要半天加真金白银。等 prompt 已经写到自相矛盾还压不住错误率,才轮到这里。

三、篇目

读完能回答
01 - 选型与基线为什么是 Qwen3-4B 不是 1.7B 或 7B?五个训练框架挑哪个、代价各是什么?base 模型现在到底什么水平?
02 - 工具集与轨迹数据要训它做什么?一条能拿来训练的轨迹长什么样?数据从哪来、要多少条、怎么过滤?
03 - 训练配置chat template 和 loss mask 怎么对齐?LoRA 超参怎么定?24G 显存怎么排?
04 - 开卡与训练观测开机后按什么顺序做?训练时该盯哪三层?曲线什么形状该杀?
05 - 评测与复盘好了多少?错在哪一层?下一轮该补数据还是调超参?

配套的可执行代码放在独立仓库 llm-training-lab01-agent-sft/common/ 下 —— 工具定义、造数据、掩码核对、四层评测、行为层探针,以及一份按顺序排好的命令清单。分开放是因为要在租来的机器上 clone 它,而博客仓库那 138 MB 站点资源训练机器用不上。

每篇里的记录表都是空的,跑一轮填一轮。

四、配置与预算

说明
BaseQwen3-4B更小的模型工具调用基础能力不够,训不出来;更大就超出 24G
训练方式LoRA全参 4B 需要 120G 以上,光 AdamW 状态就是权重的 6 倍
显卡RTX 4090 24Gbf16 权重 8G + LoRA 与优化器状态不到 1G + 激活约 3.5G,seq 2048 下余量约 11G
机时3–6 小时一两万条轨迹、2 到 3 个 epoch
成本约 $2 一轮按 $0.4/h 算;预算按跑三轮准备
基线要和训练后用同一套推理栈

base 模型的分数,必须在同一台机器、同一套 vLLM、同样的采样参数下量出来。 在本地用 API 测一个基线、训完在云上用 vLLM 测一个训后分,两个数不可比 —— 差出来的分里有多少是训练带来的,说不清。

代价是训练前多花 20 分钟机时,约 $0.15。01 篇五节有具体步骤。

前置:会用 HuggingFace 的 tokenizer 和 PEFT。读过从零训练一个小 LLM 的 SFT 那篇最好,没读也能跟上 —— 那篇讲从零写训练循环,这里直接用现成的库,重点在数据和评测。